﻿using DAL;
using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;//引入读取配置文件类所在的命名空间

namespace Optimize_Tree_Graph
{
    public partial class Form1 : Form
    {
        private List<MQ_CLASSIFICATION> classificationNodes = null;
        private MQ_CLASSIFICATIONService objService = new MQ_CLASSIFICATIONService();

        public Form1()
        {
            InitializeComponent();
            // 加载树形菜单
            LoadTvMenu();
        }

        private void LoadTvMenu()
        {
            this.classificationNodes = objService.mQ_CLASSIFICATIONs();// 加载所有菜单节点信息
            this.tv_MenuList.Nodes.Clear();// 清空所有节点
            // 创建根节点
            //根节点是CF_PARENT_ID=0，遍历节点信息列表，获取CF_PARENT_ID=0的对象
            foreach (var Item in classificationNodes)
            {
                //Cf_CODE =="10" 获取第一个父级
                if (Item.CF_PARENT_ID == "0")
                {
                    TreeNode rootNode = new TreeNode();
                    rootNode.Text = Item.Cf_NAME;
                    //rootNode.Tag = Item.CF_PARENT_ID;
                    this.tv_MenuList.Nodes.Add(rootNode);// 将根节点添加到 treeview 根节点
                    // 基于递归方式添加所有子节点
                    AddChildNodesRecursively(rootNode, Item.Cf_CODE);

                }

            }
            //展开所有根目录的一级节点
            foreach (TreeNode Item in tv_MenuList.Nodes)
            {
                //将递归树第一级展开
                Item.Expand();
                //展开所有节点
                //Item.ExpandAll();
            }

        }
        //添加所有子节点
        private void AddChildNodesRecursively(TreeNode parentNode, string preId)
        {
            // 找到所有以该节点为父节点的子节点
            var childNodes = from list in this.classificationNodes
                             where string.Equals(list.CF_PARENT_ID, preId)
                             select list;

            // 循环创建该节点的所有节点
            foreach (var item in childNodes)
            {
                // 创建新的节点并设置属性
                TreeNode node = new TreeNode();
                node.Text = item.Cf_NAME;
                //node.Tag = item.CF_ID;
                parentNode.Nodes.Add(node);// 父节点加入该子节点

                // 递归实现子节点添加
                AddChildNodesRecursively(node, item.CF_ID.ToString());
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //根据CODE
            string startCFCODE = "";
            try
            {
                // 处理 textBox5 和 textBox4 的情况
                if (textBox5 != null || textBox4 != null)
                {
                    startCFCODE = textBox4 != null && !string.IsNullOrEmpty(textBox4.Text) ? textBox4.Text : textBox5 != null && !string.IsNullOrEmpty(textBox5.Text) ? textBox5.Text : null;
                }

                // 处理 textBox1 和 textBox3 的情况
                if (textBox1 != null && !string.IsNullOrEmpty(textBox1.Text) || textBox3 != null && !string.IsNullOrEmpty(textBox3.Text))
                {
                    string name = textBox1 != null && !string.IsNullOrEmpty(textBox1.Text) ? textBox1.Text : textBox3.Text;
                    startCFCODE = MQ_CLASSIFICATIONService.Name_Obj(name);
                }
                else if (textBox2 != null && !string.IsNullOrEmpty(textBox2.Text))
                {
                    string ID = textBox2.Text;
                    startCFCODE = MQ_CLASSIFICATIONService.CF_PARENT_ID_Obj(ID);
                }
            }
            catch (Exception ex)
            {
                //MessageBox.Show("输入数据无效");
            }

            //获取递归的所有父级
            var allParents = MQ_CLASSIFICATIONService.GetAllParents(startCFCODE);
            if(allParents.Count <=0)
            {
                //MessageBox.Show("输入数据无效");
            }
            // 打印结果
            foreach (var classification in allParents)
            {
                //根节点 CF_PARENT_ID == "0"
                if (classification.CF_PARENT_ID == "0")
                {
                    this.classificationNodes = objService.mQ_CLASSIFICATIONs();// 加载所有菜单节点信息
                    this.tv_MenuList.Nodes.Clear();// 清空所有节点
                    // 创建根节点
                    //根节点是CF_PARENT_ID=0，遍历节点信息列表，获取CF_PARENT_ID=0的对象
                    foreach (var Item in classificationNodes)
                    {
                        //Cf_CODE =="10" 获取第一个父级
                        if (Item.Cf_CODE == classification.Cf_CODE)
                        {
                            TreeNode rootNode = new TreeNode();
                            rootNode.Text = Item.Cf_NAME;
                            //rootNode.Tag = Item.CF_PARENT_ID;
                            this.tv_MenuList.Nodes.Add(rootNode);// 将根节点添加到 treeview 根节点
                            // 基于递归方式添加所有子节点
                            AddChildNodesRecursively(rootNode, Item.Cf_CODE);

                        }

                    }
                }
            }
        }

        //刷新
        private void button2_Click(object sender, EventArgs e)
        {
            // 加载树形菜单
            LoadTvMenu();
        }

    }
}
